package com.chushouya.controller.open;

import com.alibaba.fastjson.JSONObject;
import com.chushouya.common.applet.WxClient;
import com.chushouya.common.constant.ServiceType;
import com.general.framework.core.schema.Response;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

/**
 * 微信Token开放接口控制器
 * 用于开发环境获取微信AccessToken，解决本地开发IP限制问题
 * 
 * @author chushouya
 * @date 2025-08-14
 */
@Slf4j
@RestController
@RequestMapping(ServiceType.OPENAPI)
@Api(tags = ServiceType.OPENAPI + "微信Token接口")
public class WechatTokenController {

    /**
     * 获取微信AccessToken
     * 提供给开发环境使用，解决本地开发IP白名单限制
     * 支持POST请求，从请求体中获取appid和secret参数
     * 
     * @param requestBody 请求体，包含appid和secret
     * @return 微信AccessToken响应
     */
    @PostMapping("/cgi-bin/token")
    @ApiOperation(value = "获取微信AccessToken", notes = "开发环境专用，解决IP限制问题")
    public Response<JSONObject> getWechatAccessToken(@RequestBody JSONObject requestBody) {
        
        try {
            log.info("开发环境获取微信AccessToken");
            
            // 从请求体中获取参数
            String requestAppid = requestBody.getString("appid");
            String requestSecret = requestBody.getString("secret");
            
            // 优先使用请求参数，如果没有则使用配置文件中的默认值
            String targetAppid = requestAppid != null ? requestAppid : "";
            String targetSecret = requestSecret != null ? requestSecret : "";
            
            log.info("使用AppID: {}", targetAppid);
            
            // 手动创建WxClient实例
            WxClient wxClient = new WxClient(targetAppid, targetSecret);
            
            // 调用WxClient的requestStableAccessToken方法
            JSONObject result = wxClient.requestStableAccessToken();
            
            log.info("微信AccessToken获取成功 - ExpiresIn: {}秒", result.getLong("expires_in"));
            
            return Response.success(result);
            
        } catch (Exception e) {
            log.error("获取微信AccessToken异常: {}", e.getMessage(), e);
            return Response.error("获取微信AccessToken异常: " + e.getMessage());
        }
    }
}
